package com.zj.service;

import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;
import com.zj.config.AlipayConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AlipayServiceImpl implements AlipayService {
    @Autowired
    private AlipayConfig alipayConfig;
    @Override
    public String createOrder(Long outTradeNo, String totalAmount, String email) {
        try {
            // 1. 创建支付宝客户端实例
            AlipayClient alipayClient = new DefaultAlipayClient(
                    alipayConfig.getGatewayUrl(),      // 支付宝网关地址
                    alipayConfig.getAppId(),           // 应用ID
                    alipayConfig.getMerchantPrivateKey(), // 商户私钥
                    alipayConfig.getFormat(),        // 数据格式
                    alipayConfig.getCharset(),         // 字符编码
                    alipayConfig.getAlipayPublicKey(), // 支付宝公钥
                    alipayConfig.getSignType()         // 签名算法
            );

            // 2. 创建页面支付请求对象
            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
            request.setReturnUrl(alipayConfig.getReturnUrl()); // 设置同步回调地址
            request.setNotifyUrl(alipayConfig.getNotifyUrl()); // 设置异步通知地址

            // 3. 构建业务参数  以下四个参数是必须要有的参数
            JSONObject bizContent = new JSONObject();
            bizContent.put("out_trade_no", outTradeNo);    // 商户订单号
            bizContent.put("total_amount", totalAmount);   // 订单金额
            bizContent.put("subject","是甜蜜屋里面的商品");
            bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY"); // 产品码

            request.setBizContent(bizContent.toString());  // 设置业务参数

            // 4. 执行请求并获取响应
            AlipayTradePagePayResponse response = alipayClient.pageExecute(request);
            if (response.isSuccess()) {
                return response.getBody();  // 返回支付页面表单
            } else {
                throw new RuntimeException("创建支付订单失败"+response.getSubMsg());
            }
        } catch (AlipayApiException e) {
            throw new RuntimeException("支付宝接口调用异常"+e.getMessage());
        }
    }
}
